package com.framestudy.autoProxy.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxy {
/**
 * Proxy 提供用于创建动态代理类和实例的静态方法
 * newProxyInstance
 * 返回一个指定接口的代理类实例，该接口可以将方法调用指派到指定的调用处理程序。
 * InvocationHandler 是代理实例的调用处理程序 实现的接口。 
每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时，将对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。 

 * @param c
 * @return
 */
	public static Object getProxyObject(final Object c){
		//代理:代理类和被代理类都有同一个父类,代理类跟被代理类有着同样的方法,然后在调用代理的时候实际上是调用的真实的被代理类的方法
		//下面这个就是应该要生成一个实例的代理类 
		return Proxy.newProxyInstance(c.getClass().getClassLoader(), c.getClass().getInterfaces(), 
			new InvocationHandler() {
				@Override
				public Object invoke(Object proxy, Method method, Object[] args)throws Throwable {
					// TODO Auto-generated method stub
					return method.invoke(c, args);
				}
			});
	}
}
